// context 控制goroutine的生命周期
// - 数据传递
// - 超时和截止时间的控制
// - 取消操作
package main

import (
	"context"
	"fmt"
)

type UserInfo struct {
	Name string
	Age  int
}

func main() {
	// 创建空的上下文
	ctx := context.Background()
	// 往上下文添加键值对
	ctx = context.WithValue(ctx, "user", UserInfo{"小明", 18})
	// 调用函数
	GetUser(ctx)
}
func GetUser(ctx context.Context) {
	// 从上下文中获取键值对
	n := ctx.Value("user")
	// 取出的值是空接口，使用前需要接口断言
	if v, ok := n.(int); ok {
		fmt.Println(v + 10)
	}
	// 断言值是否为结构体UserInfo类型
	if user, ok := n.(UserInfo); ok {
		fmt.Println(user.Name, user.Age)
	}

}
